#ifndef ALARMRECORD_H
#define ALARMRECORD_H

#include <stdint.h>

class StateInfo;
class AlarmRule;

class AlarmRecord
{
public:
    explicit AlarmRecord(int64_t id, int status,
                         int64_t alarm_rule_id, int64_t substation_id, int64_t point_id, double max_threshold, 
                         int64_t create_at = 0, int64_t update_at = 0);

    /**
     * @brief 析构函数
     */
    virtual ~AlarmRecord();

    /**
     * @brief 获取告警记录ID
     * @return 告警记录ID
     */
    int64_t id() const;

    /**
     * @brief 获取告警记录状态
     * @return 告警记录状态
     */
    int status() const;

    /**
     * @brief 获取告警规则ID
     * @return 告警规则ID
     */
    int64_t alarm_rule_id() const;

    /**
     * @brief 获取变电站ID
     * @return 变电站ID
     */
    int64_t substation_id() const;

    /**
     * @brief 获取点ID
     * @return 点ID
     */
    int64_t point_id() const;

    /**
     * @brief 获取最大阈值
     * @return 最大阈值
     */
    double max_threshold() const;

    /**
     * @brief 获取创建时间
     * @return 创建时间
     */
    int64_t create_at() const;

    /**
     * @brief 获取更新时间
     * @return 更新时间
     */
    int64_t update_at() const;

    /**
     * @brief 设置告警规则
     * @param alarm_rule 告警规则
     */
    void set_alarm_rule(AlarmRule *alarm_rule);

    /**
     * @brief 获取告警规则
     * @return 告警规则
     */
    AlarmRule *alarm_rule() const;

    /**
     * @brief 设置主站信息
     * @param state_info 主站信息
     */
    void set_state_info(StateInfo *state_info);

    /**
     * @brief 获取主站信息
     * @return 主站信息
     */
    StateInfo *state_info() const;

    /**
     * @brief 获取点地址
     * @return 点地址
     */
    int point_address() const;

    /**
     * @brief 设置点地址
     * @param point_address 点地址
     */
    void set_point_address(int point_address);
    
private:
    int64_t id_;
    int status_;
    int64_t alarm_rule_id_;
    int64_t substation_id_;
    int64_t point_id_;
    int point_address_;
    double max_threshold_;
    int64_t create_at_;
    int64_t update_at_;
    StateInfo *state_info_;
    AlarmRule *alarm_rule_;
};

#endif // ALARMRECORD_H
